package com.sprouting.ops.service;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sprouting.ops.dao.DromaraFileStorageDao;
import com.sprouting.ops.dao.OpsThirdPartyDao;
import com.sprouting.ops.dao.OpsThirdPartyUserDao;
import com.sprouting.ops.model.DromaraFileStorage;
import com.sprouting.ops.model.OpsProductQuestion;
import com.sprouting.ops.model.OpsThirdParty;
import com.sprouting.ops.model.OpsThirdPartyUser;
import com.sprouting.ops.model.qo.OpsThirdPartyQo;
import com.sprouting.ops.model.qo.OpsThirdPartySiteQo;
import com.sprouting.ops.model.vo.OpsThirdPartyVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 第三方厂商与客户
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2023/11/10 15:42
 */
@Service
@Slf4j
public class OpsThirdPartyService extends ServiceImpl<OpsThirdPartyDao, OpsThirdParty> {

    @Resource
    private OpsThirdPartyDao opsThirdPartyDao;
    @Resource
    private DromaraFileStorageDao dromaraFileStorageDao;
    @Resource
    private OpsThirdPartyUserDao opsThirdPartyUserDao;

    /**
     * 根据名称查询厂商信息，过滤掉指定id
     * @param name 厂商名称
     * @param id 要过滤的主键
     * @return
     */
    public OpsThirdParty getByNameFilterId(String name, String id) {
        return opsThirdPartyDao.getByNameFilterId(name, id);
    }

    /**
     * 分页查询厂商信息
     * @param page 分页参数
     * @param query 查询参数
     * @return
     */
    public Page<OpsThirdPartyVo> getThirdPartyPageList(Page page, OpsThirdPartyQo query) {
        return opsThirdPartyDao.getThirdPartyPageList(page, query);
    }

    /**
     * 保存第三方
     * @param opsThirdParty 第三方信息
     * @param opsUploadFile 上传的图片
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveThirdParty(OpsThirdParty opsThirdParty, DromaraFileStorage opsUploadFile) {
        opsThirdPartyDao.insert(opsThirdParty);
        if (opsUploadFile != null){
            dromaraFileStorageDao.updateById(opsUploadFile);
        }
    }

    /**
     * 更新 第三方
     * @param opsThirdParty 第三方信息
     * @param uploadFileArray 上传的图片
     */
    @Transactional(rollbackFor = Exception.class)
    public void updThirdParty(OpsThirdParty opsThirdParty, DromaraFileStorage[] uploadFileArray) {
        opsThirdPartyDao.updateById(opsThirdParty);

        if (uploadFileArray[0] != null){
            // 新的
            dromaraFileStorageDao.updateById(uploadFileArray[0]);
        }
        if (uploadFileArray[1] != null){
            // 旧的文件
            dromaraFileStorageDao.updateById(uploadFileArray[1]);
        }
    }

    /**
     * 逻辑删除厂商
     * @param opsThirdParty 第三方信息
     * @param opsUploadFile 上传的图片
     */
    @Transactional(rollbackFor = Exception.class)
    public void delThirdParty(OpsThirdParty opsThirdParty, DromaraFileStorage opsUploadFile) {
        opsThirdPartyDao.deleteById(opsThirdParty);

        if (opsUploadFile != null){
            dromaraFileStorageDao.updateById(opsUploadFile);
        }

        // 厂商人员
        LambdaUpdateWrapper<OpsThirdPartyUser> wrapperOpsThirdPartyUser = new LambdaUpdateWrapper<>();
        wrapperOpsThirdPartyUser.eq(OpsThirdPartyUser::getThirdPartyId, opsThirdParty.getId());
        opsThirdPartyUserDao.delete(wrapperOpsThirdPartyUser);
    }
}
